﻿namespace MicroCloud.Authorization.Dtos
{
    #region "功能输出DTO"
    /// <summary>
    /// 功能输出DTO
    /// </summary>
    [MapFrom(typeof(Function))]
    public class FunctionOutputDto : IOutputDto, IDataAuthEnabled
    {
        #region "属性"
        #region "获取或设置 编号"
        /// <summary>
        /// 获取或设置 编号
        /// </summary>
        public long Id { get; set; }
        #endregion
        #region "获取或设置 功能名称"
        /// <summary>
        /// 获取或设置 功能名称
        /// </summary>
        public string Name { get; set; }
        #endregion
        #region "获取或设置 区域名称"
        /// <summary>
        /// 获取或设置 区域名称
        /// </summary>
        public string Area { get; set; }
        #endregion
        #region "获取或设置 控制器名称"
        /// <summary>
        /// 获取或设置 控制器名称
        /// </summary>
        public string Controller { get; set; }
        #endregion
        #region "获取或设置 控制器的功能名称"
        /// <summary>
        /// 获取或设置 控制器的功能名称
        /// </summary>
        public string Action { get; set; }
        #endregion
        #region "获取或设置 是否是控制器"
        /// <summary>
        /// 获取或设置 是否是控制器
        /// </summary>
        public bool IsController { get; set; }
        #endregion
        #region "获取或设置 是否Ajax功能"
        /// <summary>
        /// 获取或设置 是否Ajax功能
        /// </summary>
        public bool IsAjax { get; set; }
        #endregion
        #region "获取或设置 访问类型"
        /// <summary>
        /// 获取或设置 访问类型
        /// </summary>
        public FunctionAccessType AccessType { get; set; }
        #endregion
        #region "获取或设置 访问类型是否更改，如为true，刷新功能时将忽略功能类型"
        /// <summary>
        /// 获取或设置 访问类型是否更改，如为true，刷新功能时将忽略功能类型
        /// </summary>
        public bool IsAccessTypeChanged { get; set; }
        #endregion
        #region "获取或设置 是否启用操作审计"
        /// <summary>
        /// 获取或设置 是否启用操作审计
        /// </summary>
        public bool AuditOperationEnabled { get; set; }
        #endregion
        #region "获取或设置 是否启用数据审计"
        /// <summary>
        /// 获取或设置 是否启用数据审计
        /// </summary>
        public bool AuditEntityEnabled { get; set; }
        #endregion
        #region "获取或设置 数据缓存时间（秒）"
        /// <summary>
        /// 获取或设置 数据缓存时间（秒）
        /// </summary>
        public int CacheExpirationSeconds { get; set; }
        #endregion
        #region "获取或设置 是否相对过期时间，否则为绝对过期"
        /// <summary>
        /// 获取或设置 是否相对过期时间，否则为绝对过期
        /// </summary>
        public bool IsCacheSliding { get; set; }
        #endregion
        #region "获取或设置 是否从库读取数据"
        /// <summary>
        /// 获取或设置 是否从库读取数据
        /// </summary>
        public bool IsSlaveDatabase { get; set; }
        #endregion
        #region "获取或设置 是否锁定"
        /// <summary>
        /// 获取或设置 是否锁定
        /// </summary>
        public bool IsLocked { get; set; }
        #endregion

        #region "获取或设置 创建时间 ICreatedTime、ICreationAudited  可装载接口，在数据创建时可自动设置当前时间"
        /// <summary>
        /// 获取或设置 创建时间
        /// </summary>
        public DateTime CreatedTime { get; set; }
        #endregion

        #region "获取或设置 更新时间 IUpdatedTime、IUpdateAudited 可装载接口，在数据更新时可自动设置当前时间"
        /// <summary>
        /// 获取或设置 更新时间
        /// </summary>
        public DateTime? UpdatedTime { get; set; }
        #endregion

        #region "获取或设置 数据版本 IDataVersion 可装载接口，用于乐观并发处理"
        /// <summary>
        /// 获取或设置 数据版本
        /// 在实体提交验证后（增加、修改）会自动设置一个时间戳值持久化至数据库
        /// 修改、移除时取实体数据库值与提交值比对，如不一致则拒绝提交
        /// </summary>
        public long DataVersion { get; set; }
        #endregion

        //Implementation of IDataAuthEnabled
        #region "获取或设置 是否可更新的数据权限状态"
        /// <summary>
        /// 获取或设置 是否可更新的数据权限状态
        /// </summary>
        public bool Updatable { get; set; }
        #endregion
        #region "获取或设置 是否可删除的数据权限状态"
        /// <summary>
        /// 获取或设置 是否可删除的数据权限状态
        /// </summary>
        public bool Deletable { get; set; }
        #endregion

        #endregion

    }
    #endregion

}
